package com.kylin.domain.user.provider;

import com.kylin.domain.user.command.CreateWechatUserCommand;
import com.kylin.domain.user.command.UpdateUserPhoneCommand;
import com.kylin.domain.user.command.UpdateWechatUserCommand;
import com.kylin.domain.user.vo.WechatUserInfoVO;
import com.kylin.shared.common.FunctionProvider;
import lombok.extern.slf4j.Slf4j;
import org.axonframework.commandhandling.gateway.CommandGateway;
import org.axonframework.eventhandling.gateway.EventGateway;
import org.axonframework.queryhandling.QueryGateway;
import org.springframework.stereotype.Component;

/**
 * 微信小程序用户信息处理功能
 * @author Damon S.
 * @version v1.0.1
 * @date 2020年11月25日 08:22
 */
@Slf4j
@Component
public class WechatUserProvider extends FunctionProvider {

    public WechatUserProvider(QueryGateway queryGateway,
                              CommandGateway commandGateway,
                              EventGateway eventGateway) {
        super(queryGateway, commandGateway, eventGateway);
    }

    /**
     * 根据openId查找用户并返回，若不存在则新建用户并返回
     * @param command 操作的命令对象（包含用户信息）
     * @return 返回用户信息
     */
    public WechatUserInfoVO findOrCreate(CreateWechatUserCommand command) {
        return sendCommand(command);
    }

    /**
     * 更新用户信息（来自微信）
     * @param command 操作的命令对象（包含用户信息）
     * @return 更新成功数量
     */
    public Integer updateUserInfo(UpdateWechatUserCommand command) {
        return sendCommand(command);
    }

    /**
     * 更新用户手机号（来自微信）
     * @param command 操作的命令对象（包含用户信息）
     * @return 更新成功数量
     */
    public Integer updatePhoneNo(UpdateUserPhoneCommand command) {
        return sendCommand(command);
    }
}
